
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>sentinel限流的方式？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>sentinel限流的方式？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Sentinel 提供了哪几种主要的限流方式分类？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Sentinel 主要提供四种限流方式分类：1. 基于流量控制规则（如QPS、并发线程数）；2. 基于规则类型（如关联流量、分组流量）；3. 热点参数限流；4. 系统保护规则（如CPU使用率、平均响应时间）。</div>
          </div>
          <div class="card-source">来源: Sentinel限流</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">请解释令牌桶算法（Token Bucket）的工作原理。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">令牌桶算法通过维护一个存放令牌的桶来工作。系统以固定速率向桶中添加令牌。每当有请求到来时，请求必须从桶中获取一个令牌才能被处理。如果桶中没有令牌，则请求被拒绝。这可以限制请求的频率。</div>
          </div>
          <div class="card-source">来源: 基于QPS的限流 - 令牌桶算法</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">漏桶算法（Leaky Bucket）是如何平滑流量的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">漏桶算法将请求放入一个固定容量的“漏桶”中。无论请求到来的速率如何，漏桶都以一个固定的速率向外“漏出”（即处理）请求。如果请求到来时漏桶已满，则新的请求将被拒绝。这种机制可以强制输出流量的平滑性。</div>
          </div>
          <div class="card-source">来源: 基于QPS的限流 - 漏桶算法</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在基于并发线程数的限流中，Semaphore（信号量）是如何控制并发的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Semaphore 内部维护一个表示可用许可证数量的计数器。当一个线程要访问资源时，它必须先获得一个许可证，这会使计数器减一。如果计数器为0，线程则需等待。线程访问结束后会释放许可证，使计数器加一，从而允许其他等待的线程访问。</div>
          </div>
          <div class="card-source">来源: 基于并发线程数的限流</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">什么是“热点参数限流”？它主要解决什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">热点参数限流是根据请求中的关键参数（即热点参数）来进行限流的一种方式。它主要用于防止因为某些特定参数值的请求量激增（热点访问）而导致系统崩溃或性能下降的问题。</div>
          </div>
          <div class="card-source">来源: Sentinel限流</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">除了基于请求数（QPS）和并发数，Sentinel 的系统保护规则还可以基于哪些系统指标进行限流？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Sentinel 的系统保护规则还可以基于两种关键的系统指标进行限流：系统的 CPU 使用率和资源的平均响应时间。这可以防止系统因资源消耗过高而过载。</div>
          </div>
          <div class="card-source">来源: Sentinel限流 - 系统保护规则</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">动态调整限流策略的核心思想是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心思想是根据实时监控的服务负载和性能指标（如响应时间、CPU利用率等），动态地调整限流策略和阈值，以应对不同的业务需求和流量波动，从而保障系统的稳定性和性能。</div>
          </div>
          <div class="card-source">来源: 动态调整限流策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">服务异常比例是如何触发熔断机制的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">系统会实时监控服务的异常比例。当这个比例超过预先设定的阈值时，就会触发熔断机制。熔断机制会暂时关闭服务、拒绝新请求或返回预设的错误响应，以此来保护服务不被异常请求拖垮。</div>
          </div>
          <div class="card-source">来源: 异常处理和降级策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">实现基于CPU利用率的限流需要哪些关键步骤？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要包括六个步骤：1. 选择合适的监控工具；2. 设定合理的CPU利用率阈值；3. 实时监控CPU利用率；4. 当利用率超限时触发限流策略；5. 当CPU利用率恢复正常时逐步恢复流量；6. 持续监控和调整策略。</div>
          </div>
          <div class="card-source">来源: 基于资源消耗的限流</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
